package com.thtf.homework.api;

import com.thtf.homework.dto.DataCatDTO;
import com.thtf.homework.model.DataCat;
import com.thtf.homework.model.Result;
import com.thtf.homework.util.TreeNode;
import com.thtf.homework.service.DataCatService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.List;

@CrossOrigin
@RestController
@RequestMapping("/datacat")
public class DataCatController {

    @Autowired
    private DataCatService dataCatService;

    // 新增目录：传入pid、目录名称
    @GetMapping("/create")
    public Result createDataCat(String pid, String dataCatName) {
        dataCatService.createDataCat(pid, dataCatName);
        return Result.success();
    }

    // 查询目录：返回全部目录
    @GetMapping("/querydatacat")
    public Result<List<TreeNode>> queryDataCat() {
        List<DataCat> cats = dataCatService.queryDataCat();
        List<TreeNode> rootNodes = new ArrayList<>();
        // 第一次遍历数据：加入所有父结点
        for (int i = 0; i < cats.size(); i++) {

            // 第i个数据
            // 找到父结点
            if (cats.get(i).getFMLBH().equals("0")) {
                TreeNode node = new TreeNode(cats.get(i).getMLBH(), cats.get(i).getMLMC(), cats.get(i).getTBLJ());

                // 加入根结点
                rootNodes.add(node);
            }
        }

        // 第二次遍历数据：加入所有子节点
        for (int i = 0; i < cats.size(); i++) {
            if (cats.get(i).getFMLBH().equals("0")) {
                continue;
            } else {

                // 找到所有子节点
                // 转换成员变量类型，初始化结点
                TreeNode node = new TreeNode(cats.get(i).getMLBH(), cats.get(i).getMLMC(), cats.get(i).getTBLJ());

                // 遍历父节点
                for (int j = 0; j < rootNodes.size(); j++) {
                    String pid = cats.get(i).getFMLBH();
                    String rootId = rootNodes.get(j).getId() + "";

                    // 找到对应父结点
                    if (pid.equals(rootId)) {
                        rootNodes.get(j).getChildren().add(node);
                    }
                }
            }
        }

        // 返回树形数组
        return Result.success(rootNodes);
    }

    // 重命名目录：传入目录编号、目录名称
    @PostMapping("/rename")
    public Result renameDataCat(@RequestBody DataCatDTO request) {
        System.out.println(request.getDataCatId());
        System.out.println(request.getDataCatName());
        dataCatService.renameDataCat(request.getDataCatId(), request.getDataCatName());

        return Result.success("重命名目录成功");
    }

    // 删除目录：传入目录编号
    @PostMapping("/del")
    public Result delDataCat(@RequestBody DataCatDTO request) {
        dataCatService.delDataCat(request.getDataCatId());
        return Result.success("删除目录成功");
    }
}
